Airpodder.data.EpisodeStore = Ext.extend(Ext.data.Store, {
  constructor : function(){
    Airpodder.data.EpisodeStore.superclass.constructor.call(this, {
      sortInfo  : {field: 'pubDate', direction: "DESC"},
      reader    : new Ext.data.JsonReader({
        id      : 'id',
        fields  : Airpodder.data.Episode
      })
    });
    this.conn  = Airpodder.data.conn;
    this.proxy = new Ext.sql.Proxy(this.conn, 'episode', 'id', this);
    this.on('channelupdated', this.addEpisodes);
  },

  getId    : function(id) {
    var c = this.data.map[id];
    return c ? c.data.id : '';
  },

  getTitle    : function(id) {
    var c = this.data.map[id];
    return c ? c.data.title : '';
  },

  getDescription    : function(id) {
    var c = this.data.map[id];
    return c ? c.data.description : '';
  },
  
  addEpisodes: function(channel_id, items) {
    if (Ext.isArray(items) && items.length > 0) {
      for (var i = 0; i < items.length; i++) {
        items[i]['filename'] = this._getFileName(items[i].url);
        this.addEpisode(channel_id, items[i].url, items[i])
      }
    }
  },

  addEpisode: function (channel_id, url, res) {
    this._addEpisode(channel_id, url, res.title, res.len, res.mimetype, res.guid, res.description, res.link, res.filename, res.pubDate);
  },

  _addEpisode : function (channel_id, url, title, length, mimetype, guid, description, link, filename, pub_date) {
    var c = this.findEpisode(url);
    if (!c) {
      var id = Ext.uniqueId();
      c = new Airpodder.data.Channel({
        id          : id,
        channel_id  : channel_id,
        url         : url,
        title       : title,
        length      : length,
        mimetype    : mimetype,
        guid        : guid,
        description : description,
        link        : link,
        pubDate     : new Date(pub_date),
        state       : 0,
        locked      : 0,
        filename    : filename,
        played      : 0
      }, id);
      this.add(c);
    }
    return c;
  },
  
  _getFileName: function(url) {
    if (Ext.isEmpty(url) || url.indexOf("http://") == -1) {
      return '';
    }
    var path = url.split("http://")[1].split("/");
    return path[path.length - 1];
  },
  
  loadDemoEpisodes : function () {
    this.addEpisode(
      '396966625KZYM',
      'http://podcast.umputun.com/podcasts/uwp-233/',
      {
        title       : 'UWP – Выпуск 233',
        len         : 0,
        mimetype    : 'audio/mpeg',
        guid        : 'http://podcast.umputun.com/?p=994',
        description : '- Готовимся к прошедшим войнам - UTP #2 мне понравился больше - Наша, очень красная шапка Миша',
        link        : 'UWP – Выпуск 233',
        filename    : 'ump_podcast233.mp3',
        pub_date    : (new Date()).format(Date.patterns.FullDateTime)
      }
    );
    this.addEpisode(
      '396966625KZYM',
      'http://podcast.umputun.com/podcasts/uwp-232/',
      {
        title       : 'UWP – Выпуск 232',
        len         : 0,
        mimetype    : 'audio/mpeg',
        guid        : 'http://podcast.umputun.com/?p=993',
        description : '- Своеобразие прошлого выпуска - Неудача с капризным хедсетом - Что нам делать с техническими темами',
        link        : 'UWP – Выпуск 232',
        filename    : 'ump_podcast232.mp3',
        pub_date    : (new Date()).format(Date.patterns.FullDateTime)
      }
    );
    this.addEpisode(
      '396966625KZYM',
      'http://podcast.umputun.com/podcasts/uwp-231/',
      {
        title       : 'UWP – Выпуск 231',
        len         : 0,
        mimetype    : 'audio/mpeg',
        guid        : 'http://podcast.umputun.com/?p=992',
        description : '- Технологии против перфекционизма - Не гибкое языковое отношение - Школьные добровольцы на близком примере',
        link        : 'UWP – Выпуск 231',
        filename    : 'ump_podcast231.mp3',
        pub_date    : (new Date()).format(Date.patterns.FullDateTime)
      }
    );
  },


  findEpisode : function (url) {
    var d = this.data;
    for (var i = 0, len = d.length; i < len; i++) {
      if (d.items[i].data.url === url) {
        return d.items[i];
      }
    }
    return null;
  },

  prepareTable : function() {
    try {
      this.conn.createTable({
        name    : 'episode',
        key     : 'id',
        fields  : Airpodder.data.Episode.prototype.fields
      });
    } catch(e) {
      c_log(e);
    }
  }
});

